package br.ufpe.cin.if680.lightmirror.core;

public class Ponto {
	protected double x;
	protected double y;
	protected double z;
	protected Vetor normal;
	
	public Ponto(double x, double y, double z) {
		this.x = x;
		this.y = y;
		this.z = z;
		normal = new Vetor(0,0,0);
	}
	
	public Ponto(double x, double y) {
		this.x = x;
		this.y = y;
		normal = new Vetor(0,0,0);
	}
	
	/**
	 * Retorna este ponto projetado.
	 * @param d
	 * @param hx
	 * @param hy
	 * @return
	 */
	public Ponto projecao(double d, double hx, double hy) {
		double x = (d*this.getX())/(hx*this.getZ());
		double y = (d*this.getY())/(hy*this.getZ());
		double z = d;
		return new Ponto(x,y,z);
	}
	
	/**
	 * Retorna a soma deste ponto com p.
	 * @param p
	 * @return
	 */
	public Ponto soma(Ponto p) {
		return new Ponto(this.getX() + p.getX(),this.getY() + p.getY(), this.getZ() + p.getZ());
	}
	
	/**
	 * Retorna a subtração deste ponto com p.
	 * @param p
	 * @return
	 */
	public Vetor subtracao(Ponto p) {
		double x = (this.getX() - p.getX());
		double y = (this.getY() - p.getY());
		double z = (this.getZ() - p.getZ());
		return new Vetor(x,y,z);
	}
	
	/**
	 * Retorna o ponto resultante do produto escalar deste vetor com c.
	 * @param c
	 * @return
	 */
	public Ponto produtoEscalar(double c) {
		return new Ponto(this.getX()*c, this.getY()*c, this.getZ()*c);
	}
	
	public double getX() {
		return x;
	}
	
	public double getY() {
		return y;
	}
	
	public double getZ() {
		return z;
	}
	
	public void setX(double x) {
		this.x = x;
	}
	
	public void setY(double y) {
		this.y = y;
	}
	
	public void setZ(double z) {
		this.z = z;
	}
}
